package 移除链表元素;

import java.util.List;

public class removeElements {
    public static void main(String[] args) {
        /*
        题意：删除链表中等于给定值 val 的所有节点。
        示例 1： 输入：head = [1,2,6,3,4,5,6], val = 6 输出：[1,2,3,4,5]
        示例 2： 输入：head = [], val = 1 输出：[]
        示例 3： 输入：head = [7,7,7,7], val = 7 输出：[]
         */
        ListNode ln1 = new ListNode(1, null);
        ListNode ln2 = new ListNode(2, ln1);
        ListNode ln3 = new ListNode(6, ln2);
        ListNode ln4 = new ListNode(3, ln3);
        ListNode ln5 = new ListNode(4, ln4);
        ListNode ln6 = new ListNode(5, ln5);
        ListNode ln7 = new ListNode(6, ln6);
        ListNode ln8 = new ListNode(6, ln7);
        ListNode ln9 = new ListNode(6, ln8);
        ListNode ln10 = new ListNode(6, ln9);
        ListNode head = new ListNode(6, ln10);
        int val = 6;
        head = removeElement(head, val);

        Myprint(head);

    }

    private static void Myprint(ListNode head) {
        ListNode p = head;
        while (p != null) {
            System.out.print(p.val + " ");
            p = p.next;
        }
        System.out.println();
    }

    private static ListNode removeElement(ListNode head, int val) {
        // 无头结点(设置一个虚拟头节点，处理起来会很方便)

        // 1.设置一个虚拟头节点
        ListNode vhead = new ListNode(0, head);
        // 2.逐个遍历链表
        ListNode p = vhead;

        while ( p.next != null ){
            if ( p.next.val == val ){
                // 3.遇到与val值相同的节点就删除该节点
                p.next = p.next.next;
            }else {
                // 3.不相同的节点就跳过
                p = p.next;
            }
        }
        return vhead.next;
    }


}
